This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code. Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Cmd+Shift+Enter. Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Cmd+Option+I. When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Cmd+Shift+K to preview the HTML file). The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike Knit, Preview does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.

The number of registered private cars in Sweden for the years 1977 until February 2025, monthly data, is given in the second column of the file carsmon.dat at Studium.

Find a suitable ARIMA (or SARIMA) model for these data, or a transformation thereof. Analyze the model residuals carefully, in order to make sure that the model provides a good description of the data.

It might be a good idea to try transformations, like the logarithm.

#########################
data = read.table("~/uni/analysis-time-series/carsmon.dat", header=TRUE)
x = log(data$count) # logarithm operation

automodel = auto.arima(x, d = 1, max.p = 4, max.q = 2, seasonal = T)
summary(automodel)
Series: x 
ARIMA(4,1,1) with drift 

Coefficients:
         ar1      ar2     ar3      ar4      ma1  drift
      1.1062  -0.3209  0.0409  -0.3194  -0.6301  1e-03
s.e.  0.0458   0.0630  0.0611   0.0422   0.0293  1e-04

sigma^2 = 9.633e-06:  log likelihood = 2527.02
AIC=-5040.03   AICc=-5039.83   BIC=-5009.53

Training set error measures:
                       ME        RMSE         MAE          MPE       MAPE      MASE        ACF1
Training set 2.400795e-05 0.003084822 0.002192997 0.0001721209 0.01443169 0.4994104 -0.06969448
plot(data$count, type='l')
title(main = "Number of registered private cars in Sweden")

plot(x, type='l')
title(main = "Number of registered private cars in Sweden (log)")

par(mfrow=c(1,2)) # Making the display of 2 plots


acf(x, lag.max = 50) # ACF
pacf(x, lag.max = 50) # PACF cuts off after lag 1


## DIFFERENCING
lag = 12

dx = diff(x, lag=lag)
plot(dx, type='l')
title(main = paste("Number of registered private cars in Sweden diff =", lag, sep=" "))

par(mfrow=c(1,2)) # Making the display of 2 plots


acf(dx, lag.max = 50) # ACF
pacf(dx, lag.max = 50) # PACF cuts off after lag 1


## SEASONAL DIFFERENCING
# slag = 1

# sdx = diff(dx, lag=slag)
# plot(sdx, type='l')
# title(main = paste("Number of registered private cars in Sweden diff-1, and sdiff =", slag, sep=" "))

# par(mfrow=c(1,2)) # Making the display of 2 plots

# acf(sdx, lag.max = 50) # ACF
# pacf(sdx, lag.max = 50) # PACF cuts off after lag 1

#########################
# Oscillations in ACF, with peak-to-peak difference of around 11-12 timesteps (months)
# So ARIMA(11,12,0) model
smodel=arima(dx, 
           order=c(10,0,0), 
           seasonal=list(order=c(0,0,11),period=slag)
           )

#10 - -5401 aic
#11 - 

acf(smodel$residuals, lag.max = 50) # ACF
pacf(smodel$residuals, lag.max = 50) # PACF cuts off after lag 1


# Histogram
# par(mfrow=c(1,3))
hist(smodel$residuals)
qqnorm(smodel$residuals)

tsdiag(smodel, gof.lag = 50) 

summary(smodel)

Call:
arima(x = dx, order = c(10, 0, 0), seasonal = list(order = c(0, 0, 11), period = slag))

Coefficients:
          ar1     ar2     ar3     ar4     ar5     ar6      ar7     ar8     ar9     ar10    sma1    sma2    sma3    sma4    sma5    sma6
      -0.1967  0.0891  0.2460  0.1350  0.1886  0.1832  -0.0018  0.0971  0.1433  -0.0126  1.0524  0.9987  0.8726  0.7520  0.6063  0.4779
s.e.   0.0726  0.0778  0.0756  0.0694  0.0663  0.0697   0.0803  0.0705  0.0696   0.0586  0.0602  0.1082  0.1470  0.1658  0.1662  0.1487
        sma7    sma8    sma9   sma10   sma11  intercept
      0.5000  0.4675  0.4238  0.4879  0.7036     0.0095
s.e.  0.1254  0.0996  0.0748  0.0562  0.0399     0.0043

sigma^2 estimated as 2.722e-06:  log likelihood = 2813.58,  aic = -5581.17

Training set error measures:
                       ME        RMSE         MAE      MPE     MAPE      MASE         ACF1
Training set 4.913448e-05 0.001649704 0.001095964 24.96375 47.29133 0.8496724 -0.002326466

LS0tCnRpdGxlOiAiQXNzaWdubWVudCAxIC0gQW5hbHlzaXMgb2YgVGltZSBTZXJpZXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCj4gVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gVHJ5IGV4ZWN1dGluZyB0aGlzIGNodW5rIGJ5IGNsaWNraW5nIHRoZSAqUnVuKiBidXR0b24gd2l0aGluIHRoZSBjaHVuayBvciBieSBwbGFjaW5nIHlvdXIgY3Vyc29yIGluc2lkZSBpdCBhbmQgcHJlc3NpbmcgKkNtZCtTaGlmdCtFbnRlciouIEFkZCBhIG5ldyBjaHVuayBieSBjbGlja2luZyB0aGUgKkluc2VydCBDaHVuayogYnV0dG9uIG9uIHRoZSB0b29sYmFyIG9yIGJ5IHByZXNzaW5nICpDbWQrT3B0aW9uK0kqLiBXaGVuIHlvdSBzYXZlIHRoZSBub3RlYm9vaywgYW4gSFRNTCBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvZGUgYW5kIG91dHB1dCB3aWxsIGJlIHNhdmVkIGFsb25nc2lkZSBpdCAoY2xpY2sgdGhlICpQcmV2aWV3KiBidXR0b24gb3IgcHJlc3MgKkNtZCtTaGlmdCtLKiB0byBwcmV2aWV3IHRoZSBIVE1MIGZpbGUpLiBUaGUgcHJldmlldyBzaG93cyB5b3UgYSByZW5kZXJlZCBIVE1MIGNvcHkgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBlZGl0b3IuIENvbnNlcXVlbnRseSwgdW5saWtlICpLbml0KiwgKlByZXZpZXcqIGRvZXMgbm90IHJ1biBhbnkgUiBjb2RlIGNodW5rcy4gSW5zdGVhZCwgdGhlIG91dHB1dCBvZiB0aGUgY2h1bmsgd2hlbiBpdCB3YXMgbGFzdCBydW4gaW4gdGhlIGVkaXRvciBpcyBkaXNwbGF5ZWQuCgpUaGUgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgcHJpdmF0ZSBjYXJzIGluIFN3ZWRlbiBmb3IgdGhlIHllYXJzIDE5NzcgdW50aWwgRmVicnVhcnkgMjAyNSwgbW9udGhseSBkYXRhLCBpcyBnaXZlbiBpbiB0aGUgc2Vjb25kIGNvbHVtbiBvZiB0aGUgZmlsZSBgY2Fyc21vbi5kYXRgIGF0IFN0dWRpdW0uCgpGaW5kIGEgc3VpdGFibGUgQVJJTUEgKG9yIFNBUklNQSkgbW9kZWwgZm9yIHRoZXNlIGRhdGEsIG9yIGEgdHJhbnNmb3JtYXRpb24gdGhlcmVvZi4gQW5hbHl6ZSB0aGUgbW9kZWwgcmVzaWR1YWxzIGNhcmVmdWxseSwgaW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1vZGVsIHByb3ZpZGVzIGEgZ29vZCBkZXNjcmlwdGlvbiBvZiB0aGUgZGF0YS4KCkl0IG1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIHRyeSB0cmFuc2Zvcm1hdGlvbnMsIGxpa2UgdGhlIGxvZ2FyaXRobS4KCmBgYHtyfQpsaWJyYXJ5KGZwcDIpCmxpYnJhcnkodXJjYSkKbGlicmFyeSh0c2VyaWVzKQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkYXRhID0gcmVhZC50YWJsZSgifi91bmkvYW5hbHlzaXMtdGltZS1zZXJpZXMvY2Fyc21vbi5kYXQiLCBoZWFkZXI9VFJVRSkKeCA9IGxvZyhkYXRhJGNvdW50KSAjIGxvZ2FyaXRobSBvcGVyYXRpb24KCmF1dG9tb2RlbCA9IGF1dG8uYXJpbWEoeCwgZCA9IDEsIG1heC5wID0gNCwgbWF4LnEgPSAyLCBzZWFzb25hbCA9IFQpCnN1bW1hcnkoYXV0b21vZGVsKQoKcGxvdChkYXRhJGNvdW50LCB0eXBlPSdsJykKdGl0bGUobWFpbiA9ICJOdW1iZXIgb2YgcmVnaXN0ZXJlZCBwcml2YXRlIGNhcnMgaW4gU3dlZGVuIikKcGxvdCh4LCB0eXBlPSdsJykKdGl0bGUobWFpbiA9ICJOdW1iZXIgb2YgcmVnaXN0ZXJlZCBwcml2YXRlIGNhcnMgaW4gU3dlZGVuIChsb2cpIikKCnBhcihtZnJvdz1jKDEsMikpICMgTWFraW5nIHRoZSBkaXNwbGF5IG9mIDIgcGxvdHMKCmFjZih4LCBsYWcubWF4ID0gNTApICMgQUNGCnBhY2YoeCwgbGFnLm1heCA9IDUwKSAjIFBBQ0YgY3V0cyBvZmYgYWZ0ZXIgbGFnIDEKCiMjIERJRkZFUkVOQ0lORwpsYWcgPSAxMgoKZHggPSBkaWZmKHgsIGxhZz1sYWcpCnBsb3QoZHgsIHR5cGU9J2wnKQp0aXRsZShtYWluID0gcGFzdGUoIk51bWJlciBvZiByZWdpc3RlcmVkIHByaXZhdGUgY2FycyBpbiBTd2VkZW4gZGlmZiA9IiwgbGFnLCBzZXA9IiAiKSkKCnBhcihtZnJvdz1jKDEsMikpICMgTWFraW5nIHRoZSBkaXNwbGF5IG9mIDIgcGxvdHMKCmFjZihkeCwgbGFnLm1heCA9IDUwKSAjIEFDRgpwYWNmKGR4LCBsYWcubWF4ID0gNTApICMgUEFDRiBjdXRzIG9mZiBhZnRlciBsYWcgMQoKIyMgU0VBU09OQUwgRElGRkVSRU5DSU5HCiMgc2xhZyA9IDEKCiMgc2R4ID0gZGlmZihkeCwgbGFnPXNsYWcpCiMgcGxvdChzZHgsIHR5cGU9J2wnKQojIHRpdGxlKG1haW4gPSBwYXN0ZSgiTnVtYmVyIG9mIHJlZ2lzdGVyZWQgcHJpdmF0ZSBjYXJzIGluIFN3ZWRlbiBkaWZmLTEsIGFuZCBzZGlmZiA9Iiwgc2xhZywgc2VwPSIgIikpCgojIHBhcihtZnJvdz1jKDEsMikpICMgTWFraW5nIHRoZSBkaXNwbGF5IG9mIDIgcGxvdHMKCiMgYWNmKHNkeCwgbGFnLm1heCA9IDUwKSAjIEFDRgojIHBhY2Yoc2R4LCBsYWcubWF4ID0gNTApICMgUEFDRiBjdXRzIG9mZiBhZnRlciBsYWcgMQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIE9zY2lsbGF0aW9ucyBpbiBBQ0YsIHdpdGggcGVhay10by1wZWFrIGRpZmZlcmVuY2Ugb2YgYXJvdW5kIDExLTEyIHRpbWVzdGVwcyAobW9udGhzKQojIFNvIEFSSU1BKDExLDEyLDApIG1vZGVsCnNtb2RlbD1hcmltYShkeCwgCiAgICAgICAgICAgb3JkZXI9YygxMCwwLDApLCAKICAgICAgICAgICBzZWFzb25hbD1saXN0KG9yZGVyPWMoMCwwLDExKSxwZXJpb2Q9c2xhZykKICAgICAgICAgICApCgojMTAgLSAtNTQwMSBhaWMKIzExIC0gCgphY2Yoc21vZGVsJHJlc2lkdWFscywgbGFnLm1heCA9IDUwKSAjIEFDRgpwYWNmKHNtb2RlbCRyZXNpZHVhbHMsIGxhZy5tYXggPSA1MCkgIyBQQUNGIGN1dHMgb2ZmIGFmdGVyIGxhZyAxCgojIEhpc3RvZ3JhbQojIHBhcihtZnJvdz1jKDEsMykpCmhpc3Qoc21vZGVsJHJlc2lkdWFscykKcXFub3JtKHNtb2RlbCRyZXNpZHVhbHMpCnRzZGlhZyhzbW9kZWwsIGdvZi5sYWcgPSA1MCkgCnN1bW1hcnkoc21vZGVsKQpgYGAKCmBgYHtyfQpzYXJpbWEgPC0gYXJpbWEoZHgsIG9yZGVyPWMoMSwwLDApLCBzZWFzb25hbD1saXN0KG9yZGVyPWMoMSwwLDEpLHBlcmlvZD05KSkKcGxvdChzYXJpbWEkcmVzaWR1YWxzLCB0eXBlPSdsJykKYGBgCg==